微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

java swing Jframe未正确显示

如何解决java swing Jframe未正确显示

我觉得一切正常,但由于某种原因,什么都没有正确显示,也许我错过了一些东西,但我不确定为什么它不起作用,有人可以帮我吗?

** 任务 **

通过添加两个来改进您的程序 框架中的组合框。通过组合框,用户应该能够 选择他们喜欢的字体和字体大小。然后将更新显示的文本 相应地(见下图)。

这是它的样子

enter image description here

import javax.swing.*;
import java.awt.BorderLayout;
import java.awt.Dimension;
import javax.swing.JTextField;
import java.awt.*;
import java.awt.event.*;

public class ComboGUI extends JFrame implements ActionListener {

    public JButton update;
    public JTextField textField;
    public JLabel textLabel;
    public JComboBox<String> fontBox;
    public JComboBox sizeBox;
    
    public String font;
    public String size;
    
    public ComboGUI()
    {
        components();
        panels();
        actionListener();
    }
    
    public void components()
    {
        this.update = new JButton("update");
        this.textField=new JTextField(20);
        this.textField.setText("hello");
        this.textLabel= new JLabel("GUI");
        
        this.font="Arial";
        this.size="20";
        
        this.textLabel.setFont(new Font(this.font,Font.PLAIN,Integer.parseInt(this.size)));
        
        this.fontBox=new JComboBox();
        this.fontBox.addItem("Times New Roman");
         this.fontBox.addItem("Calibri");
         
        this.sizeBox= new JComboBox();
        this.sizeBox.addItem("20");
        this.sizeBox.addItem("30");
        this.sizeBox.addItem("40");
        
        this.setSize(400,400);
        this.setDefaultCloSEOperation(JFrame.EXIT_ON_CLOSE);
        this.setLocationRelativeto(null);
        
    }
    
    public void panels(){
        JPanel northPanel =new JPanel();
        JLabel fontLabel =new JLabel("Font: ");
        JLabel sizeLabel =new JLabel("size: ");
        northPanel.add(fontLabel);
        
        
        //center
        BGPanel centerPanel =new BGPanel();
        centerPanel.add(this.textLabel);
        this.add(centerPanel,BorderLayout.CENTER);
        
        //south
         BGPanel southPanel =new BGPanel();
        southPanel.add(this.textLabel);
        this.add(southPanel,BorderLayout.CENTER);
          
    }
    
    public void actionListener(){
        this.update.addActionListener(this);
        this.fontBox.addActionListener(this);
        this.sizeBox.addActionListener(this);
        
    }
    
    
    @Override
    public void actionPerformed(ActionEvent e){
        if(e.getSource()==this.update){
            this.textLabel.setText(this.textField.getText());
            
        }
        if(e.getSource()==this.fontBox || e.getSource()==this.sizeBox){
            this.font=this.fontBox.getSelectedItem().toString();
            this.size=this.sizeBox.getSelectedItem().toString();
            this.textLabel.setFont(new Font(this.font,Integer.parseInt(this.size)));
            
        }
        this.repaint();
    }
    
    public static void main(String[] args) {
        
       ComboGUI comb =new ComboGUI();
       combo.setVisible(true);
    }   

     

}
this is what im getting instead 

enter image description here

解决方法

看起来你缺少 this.setVisible(true);在构造函数的末尾。

您的代码应如下所示:

public ComboGUI()
    {
        components();
        panels();
        actionListener();
        this.setVisible(true);
    }
,

如果有人试图做类似的事情,这就是完整的解决方案


import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import java.awt.BorderLayout;
import javax.swing.JButton;
import javax.swing.JComboBox;


public class ComboGUI extends JFrame implements ActionListener{
    
    
    public void updateLabelText(){
        size = fSize.getItemAt(fSize.getSelectedIndex());
        font = fStyles.getItemAt(fStyles.getSelectedIndex());
        updateLabel.setFont(new Font(font,Font.PLAIN,size));
    }
    
    public static BGPanel centrePanel;
    
    public  JComboBox<String> fStyles;
    public  JComboBox<Integer> fSize;
    public JButton updateButton;
    public  JLabel updateLabel;
    public  JLabel fontLabel;
    public  JLabel sizeLabel;
    public  JTextField textField;
    public  JPanel BottomPanel;
    public  JPanel topPanel;
    
    
    private String font;
    private int size;
    
    public ComboGUI() {
        
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setSize(400,400);
        this.setLocation(0,0);
        
        //Top
        topPanel = new JPanel();
        fontLabel = new JLabel("Font:");
        sizeLabel = new JLabel("Font Size:");
        
        fStyles = new JComboBox<String>();
        fStyles.addItem("Arial");
        fStyles.addItem("TimesRoman");
        fStyles.addItem("Serif");
        fStyles.addItem("Monospaced");
        fStyles.addActionListener(this);
        
        fSize = new JComboBox<Integer>();
        fSize.addItem(10);
        fSize.addItem(20);
        fSize.addItem(30);
        fSize.addItem(40);
 
        fSize.addActionListener(this);
        
        topPanel.add(fontLabel);
        topPanel.add(fStyles);
        topPanel.add(sizeLabel);
        topPanel.add(fSize);
        
        
        //CentrePanel setup
        centrePanel = new BGPanel();
        updateLabel = new JLabel("I love PDC :)");
        centrePanel.add(updateLabel);
        

        //Bottom
        BottomPanel = new JPanel();
        updateButton = new JButton("Update");
        textField  = new JTextField(20);
        textField.setText("I love PDC :)");
        updateButton.addActionListener(this);
        BottomPanel.add(textField);
        BottomPanel.add(updateButton);
       
       
        this.add(centrePanel,BorderLayout.CENTER);
        this.add(BottomPanel,BorderLayout.SOUTH);
        this.add(topPanel,BorderLayout.NORTH);
        
        updateLabelText();
    }
        
    public static void main(String[] args) {
        ComboGUI combo = new ComboGUI();
        combo.setVisible(true);
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        if(e.getSource() == updateButton){
            updateLabel.setText(textField.getText().trim());
        }
        if(e.getSource() == fStyles){
            updateLabelText();
        }
        
        if (e.getSource() == fSize){
             updateLabelText();
        }
        
    }
    
    
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。