Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 实现GUI_Java_Swing_Awt - Fatal编程技术网

Java 实现GUI

Java 实现GUI,java,swing,awt,Java,Swing,Awt,我需要一个GUI,它应该有两行两列[第一列带有标签,第二列带有文本字段]。我已经写了下面的代码,但我无法将其放入列和行中。请您帮助将其放入列和行中 public void showstate(){ MyPanel b=new MyPanel(); f.setBounds(50, 50, 800, 600); f.add(b); b.updateState(result); f.setVisible(true);

我需要一个GUI,它应该有两行两列[第一列带有标签,第二列带有文本字段]。我已经写了下面的代码,但我无法将其放入列和行中。请您帮助将其放入列和行中

 public void showstate(){

       MyPanel b=new MyPanel();
       f.setBounds(50, 50, 800, 600);
       f.add(b);
       b.updateState(result);
       f.setVisible(true);
       System.out.println("Number of times AC is on:" + AcCounter);
       System.out.println("Number of times Heater is on:" + HeaterCounter);


}

class MyPanel extends JPanel {

    /**
 * 
 */
private static final long serialVersionUID = 1L;
    private JTextField t;
    private JTextField v;


    public MyPanel() {
    //setBorder(BorderFactory.createLineBorder(Color.black));


    JLabel l = new JLabel("THE STATUS OF AC IS");


    this.add(l);
    t = new JTextField("<html><table><tr><td></td><td></td></tr><br></br></table></html>");

    this.add(t);
    //JLabel l = new JLabel("");  
   l.setBounds(100, 100, 30, 30);

    JLabel p = new JLabel("THE STATUS OF HEATER IS");


    p.setAlignmentX(LEFT_ALIGNMENT);
    p.setHorizontalAlignment(30);
    p.setBounds(100, 200, 30, 30);
    this.add(p);
    v = new JTextField("<td></td></tr></table></html>");

    this.add(v);



  // JLabel m = new JLabel("<html> <span><br><br><br>Accounter</br></br></br></span>    </html> ",JLabel.CENTER);


  //m.setBounds(100, 300, 30, 30);

 // JLabel n = new JLabel("<html> <span><br><br><br>Heatercounter</br></br></br></span></html> ", JLabel.CENTER);

    //n.setBounds(100, 400, 30, 30);


    t.setBounds(300, 400, 30, 50);

  //  q = new JTextField("");
  //  w = new JTextField("");

   // this.add(m);
 //   this.add(q);
   // this.add(n);
 //   this.add(w);

}

public void updateState(String result) {

    String ac, ab;
   //     double AcIsOn,HeaterIsOn;

    if ("aboveHt".equals(result) || "coolAir".equals(result)) {
        ac = "cooler on";
        AcCounter++;
    } else {
        ac = "cooler off";
    }


     if(temperature==72){ 
        ab = "Heater off";
    }
     else  if ("belowHt".equals(result)) {
         ab = "Heater on";
         HeaterCounter++;
        // AcCounter=1;
     }
    else {
        ab = "Heater off";
    }                                               
      t.setText(ac);
     v.setText(ab);

}        
}
public void showstate(){
MyPanel b=新的MyPanel();
f、 立根(50,50800600);
f、 添加(b);
b、 (结果);
f、 setVisible(真);
System.out.println(“AC开启的次数:“+AcCounter”);
System.out.println(“加热器打开的次数:“+加热器计数器”);
}
类MyPanel扩展了JPanel{
/**
* 
*/
私有静态最终长serialVersionUID=1L;
私有jtext字段;
私人JTextField v;
公共事务委员会(){
//setboorder(BorderFactory.createLineBorder(Color.black));
JLabel=新的JLabel(“AC的状态为”);
本条增补(l);
t=新的JTextField(“

”); 本条增补(t); //JLabel=新的JLabel(“”); l、 立根(100,100,30,30); JLabel p=新JLabel(“加热器状态为”); p、 setAlignmentX(左对齐); p、 设置水平对齐(30); p、 立根(100,200,30,30); 本条增补(p); v=新的JTextField(“”); 本条增补(v); //JLabel m=新JLabel(


会计人员

”,JLabel.CENTER); //m、 立根(100,300,30,30); //JLabel n=新JLabel(


加热器计数器

”,JLabel.CENTER); //n、 立根(100400,30,30); t、 立根(300,400,30,50); //q=新的JTextField(“”); //w=新的JTextField(“”); //本条增补(m); //本条增补(q); //本条增补(n); //本条增补(w); } public void updateState(字符串结果){ 串ac,ab; //双阿西森; 如果(“高于HT”。等于(结果)| |“冷却空气”。等于(结果)){ ac=“冷却器打开”; AcCounter++; }否则{ ac=“冷却器关闭”; } 如果(温度==72){ ab=“加热器关闭”; } else if(“belowHt.”等于(结果)){ ab=“加热器打开”; 加热器计数器++; //AcCounter=1; } 否则{ ab=“加热器关闭”; } t、 setText(ac); v、 setText(ab); } }

我得到的输出是Ac的状态JTextField加热器的状态JTextField在一行中

正确的布局方式是使用布局管理器。您的面板有一个默认布局FlowLayout,它将所有组件放在一行中,就像您正在观察的一样


您可以使用GridLayout或BoxLayout的组合或更复杂的东西。查看以做出选择。

在Swing中布局事物的正确方法是使用布局管理器。您的面板有一个默认布局FlowLayout,它将所有组件放在一行中,就像您正在观察的一样


您可以使用GridLayout或BoxLayout的组合或更复杂的东西。查看以做出选择。

我建议您阅读有关它的内容,它可以帮助您构建GUI

下面是一个示例,其中
GridLayout
1列有2个标签和2个第2列字段:

public class Example extends JFrame {

public Example() {
    setLayout(new GridLayout(2,2));
    JLabel l1 = new JLabel("l1");
    JLabel l2 = new JLabel("l2");
    JTextField f1 = new JTextField();
    JTextField f2 = new JTextField();

    add(l1);
    add(f1);
    add(l2);
    add(f2);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    pack();
    setVisible(true);
}

public static void main(String...strings ){
    Example e = new Example();
}

}

我建议您阅读有关它帮助您构建GUI的内容

下面是一个示例,其中
GridLayout
1列有2个标签和2个第2列字段:

public class Example extends JFrame {

public Example() {
    setLayout(new GridLayout(2,2));
    JLabel l1 = new JLabel("l1");
    JLabel l2 = new JLabel("l2");
    JTextField f1 = new JTextField();
    JTextField f2 = new JTextField();

    add(l1);
    add(f1);
    add(l2);
    add(f2);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    pack();
    setVisible(true);
}

public static void main(String...strings ){
    Example e = new Example();
}

}

有很多方法可以实现这一点

如前所述,在使用Swing时,您应该充分利用适当的布局管理器,Swing API是围绕它们设计的(或者考虑到它们)

另一种方法是使用
JTable

注意事项:这是一个非常简单的示例,假设是一个单行表。就我个人而言,我更喜欢允许多行,但这可以让基本想法得到理解

import java.awt.BorderLayout;
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.table.AbstractTableModel;

public class TestTable {

    public static void main(String[] args) {
        new TestTable();
    }

    public TestTable() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                }

                MonitorTableModel model = new MonitorTableModel();
                model.setAcStatus("Off");
                model.setHeaterStatus("On");

                JTable table = new JTable(model);
                JScrollPane scrollPane = new JScrollPane(table);                

                JFrame frame = new JFrame("Testing");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setLayout(new BorderLayout());
                frame.add(scrollPane);
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }
        });
    }

    public class MonitorTableModel extends AbstractTableModel {

        private String acStatus;
        private String heaterStatus;

        public void setAcStatus(String acStatus) {
            this.acStatus = acStatus;
            fireTableCellUpdated(1, 0);
        }

        public void setHeaterStatus(String heaterStatus) {
            this.heaterStatus = heaterStatus;
            fireTableCellUpdated(1, 1);
        }

        @Override
        public int getRowCount() {
            return 1;
        }

        @Override
        public int getColumnCount() {
            return 2;
        }

        @Override
        public Class<?> getColumnClass(int columnIndex) {
            return String.class;
        }

        @Override
        public String getColumnName(int column) {
            return column == 0 ? "AC Status" : "Heater Status";
        }

        @Override
        public Object getValueAt(int rowIndex, int columnIndex) {
            return columnIndex == 0 ? acStatus : heaterStatus;
        }

    }        
}
导入java.awt.BorderLayout;
导入java.awt.EventQueue;
导入javax.swing.JFrame;
导入javax.swing.JScrollPane;
导入javax.swing.JTable;
导入javax.swing.UIManager;
导入javax.swing.UnsupportedLookAndFeelException;
导入javax.swing.table.AbstractTableModel;
公共类测试表{
公共静态void main(字符串[]args){
新的TestTable();
}
公共测试表(){
invokeLater(新的Runnable(){
@凌驾
公开募捐{
试一试{
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
}catch(ClassNotFoundException |实例化Exception | IllegalacessException |不支持ookandfeelException ex){
}
MonitorTableModel模型=新的MonitorTableModel();
型号:setAcStatus(“关闭”);
型号:setHeaterStatus(“On”);
JTable table=新的JTable(模型);
JScrollPane scrollPane=新的JScrollPane(表);
JFrame=新JFrame(“测试”);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(新的BorderLayout());
frame.add(滚动窗格);
frame.pack();
frame.setLocationRelativeTo(空);
frame.setVisible(true);
}
});
}
公共类MonitorTableModel扩展了AbstractTableModel{
私有字符串状态;
私有字符串加热器状态;
public void setAcStatus(字符串acStatus){
this.acStatus=acStatus;
FireTableCell更新(1,0);
}
公共无效setHeaterStatus(字符串heaterStatus){
this.heaterStatus=heaterStatus;
FireTableCell更新(1,1);
}
@凌驾
public int getRowCount(){
返回1;
}
@凌驾
public int getColumnCount(){
返回2;
}
@凌驾
公共类getColumnClass(int columnIndex){
返回字符串.class;
}
@凌驾