Java: JDialog Buttons hinzufügen?

2 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Du hast ja nur einen Button erzeugt, den du adden kannst. Es wird ja nicht automatisch jedes mal einen Button erstellt , wenn du einen hinzufügst.

Ich würde dir deshalb ein Array aus Buttons empfehlen, dann kannst du da auch Listener drauf adden.

Button[] buttons = new Button[25]
for(int i = 0; i < buttons.length; i++){
    buttons[i] = new Button("Text")
    object.add(buttons[i]);
}

~Tim

Und allgemein würd ich dir JavaFX empfehlen um das zu lernen.

Ist moderner und schicker, bietet mehr Möglichkeiten und ist meiner Ansicht nach einfacher damit was zu bauen (vor allem mit dem Scene Builder, da kannst dir deine GUI einfach ohne Code zusammenbasteln).

1

Du fügst aber immer den gleichen Button ein. Probiers mal so aus:

// 25 Buttons ins Fenster platzieren
for (int k = 1; k < = 25; k++) {
object.add(new Button("Text"));
}

Die Buttons sind dann aber ziemlich fürn Arsch, man kann da ja keinen Listener adden.

0

Variable von einer Klasse in eine andere Übergeben?

Hallo zusammen,

ich programmiere gerade in Java und habe ein kleines Problem.

ich habe 3 neue Klassen erzeugt. Nur die erste Klasse besitzt eine main-Methode. Nun wollte ich die in der main Methode erzeuge Zufallszahl an die dritte Klasse übergeben um dort etwas damit zu machen.

Leider weiß ich nicht wie das geht.

Anbei der Sourcecode:

Hier die Klasse mit der Main-Methode:

package Klassen;

import java.awt.Graphics;
import javax.swing.JPanel;

public class HauptFenster {

    
    public static void main(String[] args) {
        
        Fenster fenster = new Fenster();
        Rechteck panel = new Rechteck();
        
        fenster.add(panel);
        
        while(true){
        
            int high = (int)(Math.random()*200);
            int width = (int)(Math.random()*150);
            
        }
    }
}

Hier die Klasse 3:

package Klassen;

import java.awt.Graphics;
import javax.swing.JPanel;

public class Rechteck extends JPanel {
    
public int zufall;
    
    public Rechteck(){
        
        this.setSize(500, 500);
    }

    public void paint (Graphics g){
        g.fillRect(120, 100, 100, 130);
    }
}

Die Beispiel soll nur zur Übung dienen.

MfG

...zur Frage

Java Chat-Programm: Namen und Nachricht tabellarisch ausgeben

Hallo,

ich schreibe zur Zeit einen einfachen Chat Client in Java. Die GUI besteht aus 3 Teilen: einer AWT TextArea, einem TextField und einem Button. In der TextArea werden (Absender-)Namen und Nachricht angezeigt. Sind die Namen aber untersciedlich lang, fängt alles an, unübersichtlich zu werden. Meine Frage: Ist es möglich, Namen und Nachrichten "tabellarisch" darzustellen, dh alle Nachrichten unabhängig der länge des Namens an der gleichen Stelle beginnen zu lassen?

Ich hatte schon mehrere Lösungsversuche, u.a. angleichen der Name -Strings mit Leerzeichen(erfolglos), JTable(zu kompliziert für mich, leider anfänger), zwei textAreas (funktioniert maximal solange wie nachricht und name beide einzeilig sind), ...

Hat jemand ne idee?

GUI Code:

package paket;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JSeparator;
import javax.swing.JTextField;
import javax.swing.border.EmptyBorder;
import java.awt.TextArea;
import java.awt.Color;


public class GUI extends JFrame {

private static final long serialVersionUID = 1696775456153992537L;
private JPanel contentPane;
public JTextField textField;
public JButton btnSend = new JButton("Send");
private static TextArea textArea = new TextArea(null, 0, 0, TextArea.SCROLLBARS_VERTICAL_ONLY);

/**
 * Create the frame.
 */
public GUI() {
    setResizable(false);
    setTitle("Chat");

    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setBounds(100, 100, 450, 300);
    contentPane = new JPanel();
    contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
    setContentPane(contentPane);
    contentPane.setLayout(null);
    
    textField = new JTextField();
    textField.setBounds(10, 226, 330, 40);
    contentPane.add(textField);
    textField.setColumns(10);
    
    textField.addKeyListener(new Drücker());
    textField.setEditable(false);
    
    btnSend.setBounds(345, 226, 89, 40);
    contentPane.add(btnSend);
    
    btnSend.addActionListener(new DerHandler());
    btnSend.setEnabled(false);
    
    JSeparator separator = new JSeparator();
    separator.setBounds(10, 220, 424, 2);
    contentPane.add(separator);
    
    textArea.setBackground(Color.WHITE);
    textArea.setEditable(false);
    textArea.setBounds(10, 10, 424, 204);
    
    contentPane.add(textArea);
    
    this.setVisible(true);
    
}
//------------------------------------------------------------------------------------------------------------------

public void appendMessage(String text){
    
    textArea.append("[Service] :  " + text + "\n");
    
}

public void appendMessage(String text, String name){
    
    textArea.append("[" + name + "] :  " + text + "\n");
    
}

public void clearText(){
    
    textArea.setText("");
    
}

//  --------------------------------------------------------------------------------------------

Hier kommt nur noch der ActionListener für den Button
...zur Frage

Wie kann ich hier ein Textfeld hinzufügen Java?

Ich will dort ein Textfeld generieren doch bei mir kommt der Fehler das es dann auf der gleichen Zeile ist

Code:

import javax.swing.; import java.awt.;

/** * Creates the complexer elements and simpler ones with specified data/configurations */ public abstract class Builder extends Elements {

public JPanel mainPanel() {
    JPanel mainPanel = new JPanel();
    mainPanel.setLayout(new BoxLayout(mainPanel, BoxLayout.PAGE_AXIS));
    mainPanel.setBackground(Color.gray);
    return mainPanel;
}

/**
 * Creates a usage panel
 * @param testRowNumber Number of the testRow, for which a panel will be created
 * @return (usage) panel element
 */
public JPanel panel(int testRowNumber) {
    JPanel panel = new JPanel();
    panel.setLayout(new BoxLayout(panel, BoxLayout.LINE_AXIS));
    panel.add(label("Testreihe: " + testRowNumber + "  "));
    String[] dropDownValuesFixed = {"MP 2", "MP 3", "MP 4", "MP 5", "MP 6", "MP 8", "MP 9"};
    panel.add(dropDownMenu(dropDownValuesFixed));
    panel.add(label("  Portangabe "));
    JTextField textField = textField(7);
    ElementsHandler.setTextField(textField, testRowNumber);
    panel.add(textField);
    JButton button = button("Bestätigen");
    ElementsHandler.setButton(button, testRowNumber);
    panel.add(button);
    return panel;
}

}

...zur Frage

Wo liegt in diesem Script der Fehler ?!?

package com.example.luis.englischhilfen;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    private Button button;
    private Button button2;
    private Button button4;
    private Button button5;
    private Button button6;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button button = findViewById(R.id.button);
        Button button2 = findViewById(R.id.button2);
        Button button3 = findViewById(R.id.button3);
        Button button4 = findViewById(R.id.button4);
        Button button5 = findViewById(R.id.button5);
        Button button6 = findViewById(R.id.button6);
        button.setOnClickListener(this);
        button.setOnClickListener(this);
        button.setOnClickListener(this);
        button.setOnClickListener(this);
        button.setOnClickListener(this);
        button.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.button:
                openActivity2();
                break; // HIER?!
            case R.id.button2:
                openActivityPresentProgrssive();
                break;
        }
    } // HIER?!

    public void openActivityPresentProgrssive() {
        Intent intent = new Intent(this, ActivityPresentProgrssive.class);
        startActivity(intent);
    }

    public void openActivity2() {
        Intent intent = new Intent(this, Activity2.class);
        startActivity(intent);
    }
}

Also ich möchte eigentlich nur dass in der App die ich mit Java Programmiere 6 Buttons sind und wenn man auf einen klickt die entsprechenden Layouts kommen. Beim ersten Mal funktioniert es auch, aber beim 2ten nicht! Ich habe auch schon die XML Datei fertig gemacht, die der Button öffnen soll.

Würde mich über eine Rückmeldung freuen

...zur Frage

JavaFX mit Gridpane 2 Hbox in das selbe Kästchen?

Hi!

Wie kann ich dafür sorgen, dass wenn ich in ein Kästchen einer Javefx Gridpane 2 Hboxen tue, dass deren beider Komponenten noch für Events empfänglich sind. Hier ein Beispiel, dass NICHT funktioniert:

import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.layout.*;
import javafx.stage.Stage;

public class Test extends Application {

public static void main(String[] args) {
    launch(args);
}
@Override
public void start(Stage primaryStage) {
    primaryStage.setTitle("Test");
    Button btn1 = new Button();
    btn1.setText("Knopf 1");
    btn1.setOnAction(new EventHandler<ActionEvent>() {

        @Override
        public void handle(ActionEvent event) {
            System.out.println("1. Knopf");
        }
    });
    Button btn2 = new Button();
    btn2.setText("Knopf 2");
    btn2.setOnAction(new EventHandler<ActionEvent>() {

        @Override
        public void handle(ActionEvent event) {
            System.out.println("2. Knopf");
        }   
    });
    HBox b1 = new HBox();
    b1.setAlignment(Pos.BASELINE_LEFT);
    b1.getChildren().add(btn1);
    
    HBox b2 = new HBox();
    b2.setAlignment(Pos.BASELINE_RIGHT);
    b2.getChildren().add(btn2);
    
    GridPane root = new GridPane();
    root.setGridLinesVisible(true);
    root.add(b2, 0, 0);
    root.add(b1, 0, 0);
    root.add(new Label("______________SPACER______________"), 0, 1);
    primaryStage.setScene(new Scene(root, 300, 250));
    primaryStage.show();
  }
}

Der 2. Knopf steht zwar am Anfang im Fokus, lässt sich aber nicht drücken/ mit Enter betätigen. Er lässt sich auch nach drücken des 1. Knopfs nicht wieder in den Fokus bringen. Wie kann ich das Lösen, OHNE beide in eine box zu bringen?

Danke für alle hilfreichen Antworten. __________________________________________________________________

Ich will NICHT sowas wie "Du köntest die knöpfe doch einfach in verschiedene Kästchen selzen." hören. Das ist nur ein BEISPIEL, bei meinem Code, für den ich das brauche, ist das vonnöten.

...zur Frage

Java Eclipse, GUIs: Neues Frame, Buttons ohne Funktion?

Ich versuche mich gerade an dem Erstellen von GUIs/Benutzeroberflächen mit Hilfe von Java Eclipse und Java Swing.

Es existieren mehrere Oberflächen (Fenster), die jeweils andere Methoden und Klassen beinhalten. Über Buttons kann ich diese Fenster aufrufen. Nehmen wir also an ich habe drei GUIs: Start, Admin, User. Zu Beginn möchte ich, dass sich das Start GUI öffnet. Dort befinden sich zwei Buttons - der eine öffnet das Admin GUI und der andere das User GUI.

Über den ActionListener erzeuge ich ein Klick-Event, lass das Admin-Fenster öffnen und das Start-Fenster schließen:

buttonAdmin.addActionListener(new ActionListener() {
  public void actionPerformed(ActionEvent e) {
    AdminGUI window = new AdminGUI();
    window.setVisible(true); 
    setVisible(false);
    ...

Das klappt soweit auch. Mein Problem taucht dann im Admin Fenster auf. Dort gibt es ebenfalls Buttons, um beispielsweise etwas auszugeben. Wenn ich irgendeinen Button klicke, passiert nichts. Ich habe die Vermutung, dass sich nur das Frame aufbaut, der Rest vom Code jedoch nicht geladen bzw. eingelesen wird. Fehlt eventuell noch irgendeine Methode, die genau das macht?

...zur Frage

Was möchtest Du wissen?