【发布时间】:2015-08-12 23:38:57
【问题描述】:
我创建了一个扩展 JFrame 的新类和扩展 JPanel 的新类以制作摇摆 GUI。太好了,我喜欢它,因为它易于阅读。
但是,当涉及到事件处理时,事情开始变得复杂。我所做的似乎并不是真正的解决方案。就像打破好习惯让某事发挥作用一样。我怎样才能使它正常工作?
这是我的 JFrame 类
public class MainFrame extends JFrame{
private JTextArea textArea;
public MainFrame(String title){
super(title);
//set layout
setLayout(new BorderLayout());
//create components
JButton buttonOne = new JButton("click me");
textArea = new JTextArea();
JPanel detailedPanel = new leftPanel();
//add to panel
Container c = getContentPane();
c.add(buttonOne, BorderLayout.SOUTH);
c.add(textArea, BorderLayout.CENTER);
c.add(detailedPanel, BorderLayout.WEST);
//Event Listening
leftPanel.buttonAdd.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
textArea.setText(textArea.getText() + " " + leftPanel.fieldName.getText() + " : " + leftPanel.fieldOccupation.getText());
}
});
}
}
这是我的 JPanel
public class leftPanel extends JPanel {
public static JTextField fieldName;
public static JTextField fieldOccupation;
public static JButton buttonAdd;
public leftPanel(){
Dimension panelSize = getPreferredSize();
panelSize.width = 250;
setPreferredSize(panelSize);
setBorder(BorderFactory.createTitledBorder("Personal Info"));
//labels
JLabel labelName = new JLabel("name: ");
JLabel labelOccupation = new JLabel("Occupation: ");
//textFields
fieldName = new JTextField(10);
fieldOccupation = new JTextField(10);
//buttons
buttonAdd = new JButton("Add !");
//actions
buttonAdd.addActionListener(new ActionListener(){
//on click
public void actionPerformed(ActionEvent e) {
String name = fieldName.getText();
String occupation = fieldOccupation.getText();
System.out.print(name + ": " + occupation);
}
});
setLayout(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
//// First Y add //////////////////////////////////////
//label NAME
gbc.anchor = GridBagConstraints.FIRST_LINE_END;
gbc.weightx = 1;
gbc.weighty = 1;
gbc.gridx = 0;
gbc.gridy = 0;
add(labelName, gbc);
//label Occupation
gbc.anchor = GridBagConstraints.FIRST_LINE_END;
gbc.weightx = 1;
gbc.weighty = 1;
gbc.gridx = 0;
gbc.gridy = 1;
add(labelOccupation, gbc);
//// SECOND Y add /////////////////////////////////////
//text field name
gbc.anchor = GridBagConstraints.FIRST_LINE_START;
gbc.weightx = 2;
gbc.weighty = 1;
gbc.gridx = 1;
gbc.gridy = 0;
add(fieldName, gbc);
//text feld occupation
gbc.anchor = GridBagConstraints.FIRST_LINE_START;
gbc.weightx = 2;
gbc.weighty = 1;
gbc.gridx = 1;
gbc.gridy = 1;
add(fieldOccupation, gbc);
//// THIRD Y add //////////////////////////////////////
//add button
gbc.anchor = GridBagConstraints.FIRST_LINE_START;
gbc.gridx = 1;
gbc.gridy = 3;
gbc.weightx = 1;
gbc.weighty = 10;
add(buttonAdd, gbc);
}
}
【问题讨论】:
-
offtopic...用大写的第一个字母命名您的类是一个好习惯...
public class leftPanel可以是public class LeftPanel -
另外,
static不是你的朋友,它不是跨对象通信机制,千万不要这样使用
标签: java swing user-interface event-handling jpanel