Pergunta

Isso está me deixando com muita raiva, eu trabalhei nisso há 2 dias, abriu 2 livros e os examinei e ainda não consigo fazer esse programa para executar da maneira que eu quero correr. Estou chegando ao ponto em que, se isso não ajudar, eu parei.

Eu quero um aplicativo de quadro simples. Possui um JCOMBOBOX centrado no topo. Ao lado, há um campo de texto grande o suficiente para mostrar dígitos numéricos como "US $ 49,99" abaixo, é um local para uma área de texto mostrando termos de serviço abaixo, que é a caixa de seleção que concorda com os termos de serviço abaixo que são 2 botões "Aceitar" e "declínio"

Eu trabalhei nisso por 2 dias, aqui está a codificação:

public class Bar extends JFrame implements ActionListener
{
    public Bar(final JFrame frame)
    {
        String[] tests = { "A+ Certification", "Network+ Certification", "Security+ Certification", "CIT Full Test Package" };
        JButton button = new JButton("Click Meh");
        add(new JLabel("Welcome to the CIT Test Program "));
        add(new JLabel("Please select which Test Package from the list below."));
        frame.setVisible(true);
        frame.setSize(250,250);
        JPanel pane1 = new JPanel(new FlowLayout());
        JPanel pane2 = new JPanel(new FlowLayout());

        JMenuBar menuBar = new JMenuBar();
        JMenu fileMenu = new JMenu("File");
        JMenu editMenu = new JMenu("Edit");
        JMenu helpMenu = new JMenu("Help");
        menuBar.add(fileMenu);
        menuBar.add(editMenu);
        menuBar.add(helpMenu);
        JMenuItem newMenu = new JMenuItem("New  (Ctrl+N)");
        JMenuItem openMenu = new JMenuItem("Open  (Ctrl+O)");
        JMenuItem saveMenu = new JMenuItem("Save  (Ctrl+S)");
        saveMenu.addActionListener(this);
        JMenuItem exitMenu = new JMenuItem("Exit  (Ctrl+W)");
        JMenuItem cutMenu = new JMenuItem("Cut  (Ctrl+X)");
        JMenuItem copyMenu = new JMenuItem("Copy  (Ctrl+C)");
        JMenuItem pasteMenu = new JMenuItem("Paste  (Ctrl+V)");
        JMenuItem infoMenu = new JMenuItem("Help  (Ctrl+H)");
        fileMenu.add(newMenu);
        fileMenu.add(openMenu);
        fileMenu.add(saveMenu);
        fileMenu.add(exitMenu);
        editMenu.add(cutMenu);
        editMenu.add(copyMenu);
        editMenu.add(pasteMenu);
        helpMenu.add(infoMenu);
        frame.setJMenuBar(menuBar);
        JComboBox packageChoice =  new JComboBox(tests);
        frame.add(packageChoice);


    }

     public void actionPerformed(ActionEvent e)
  {
  Object source = e.getSource();
  {
  }

}

Editar: esqueci de adicionar o segundo programa

public class JFrameWithPanel
{
    public static void main(String[] args)
    {
         JPanel panel = new Bar(new JFrame("CIT Test Program"));
    }
}

Como faço para que isso tenha tudo onde eu quero e apareço? Estou muito confuso por causa disso e agora mal consegui como os quadros funcionam.

Foi útil?

Solução

Os componentes em swing devem ser dispostos em uma certa ordem.

Você começa com um jframe. Os únicos componentes que são colocados no JFrame são um jmenubar e um jpanel. Você não adiciona outros componentes em um JFrame. Você adiciona componentes em um jpanel.

Aqui está o código de Nick, reorganizado para definir os componentes na ordem correta. Eu usei o GridLayout porque era mais rápido. Você deve usar o GridBaglayout, como Nivas disse.

public class Bar {

    private static final long serialVersionUID = 1L;

    public Bar(final JFrame frame) {
        JMenuBar menuBar = buildMenuBar();
        frame.setJMenuBar(menuBar);

        JPanel masterPanel = new JPanel(new GridLayout(2, 1));

        JPanel pane1 = new JPanel(new GridLayout(3, 1));
        pane1.add(new JLabel("Welcome to the CIT Test Program "));
        pane1.add(new JLabel("Please select which Test Package from the list below."));
        JButton button = new JButton("Click Me");
        pane1.add(button);

        JPanel pane2 = new JPanel(new GridLayout(1, 1));
        String[] tests = { "A+ Certification", "Network+ Certification",
                "Security+ Certification", "CIT Full Test Package" };
        JComboBox packageChoice = new JComboBox(tests);
        pane2.add(packageChoice);

        masterPanel.add(pane1);
        masterPanel.add(pane2);

        frame.add(masterPanel);
        frame.pack();

        frame.setVisible(true);
//      frame.setSize(250, 250);

    }

    public JMenuBar buildMenuBar() {
        JMenuBar menuBar = new JMenuBar();
        JMenu fileMenu = new JMenu("File");
        JMenu editMenu = new JMenu("Edit");
        JMenu helpMenu = new JMenu("Help");
        menuBar.add(fileMenu);
        menuBar.add(editMenu);
        menuBar.add(helpMenu);
        JMenuItem newMenu = new JMenuItem("New  (Ctrl+N)");
        JMenuItem openMenu = new JMenuItem("Open  (Ctrl+O)");
        JMenuItem saveMenu = new JMenuItem("Save  (Ctrl+S)");
        saveMenu.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                // TODO Auto-generated method stub

            }
        });
        JMenuItem exitMenu = new JMenuItem("Exit  (Ctrl+W)");
        JMenuItem cutMenu = new JMenuItem("Cut  (Ctrl+X)");
        JMenuItem copyMenu = new JMenuItem("Copy  (Ctrl+C)");
        JMenuItem pasteMenu = new JMenuItem("Paste  (Ctrl+V)");
        JMenuItem infoMenu = new JMenuItem("Help  (Ctrl+H)");
        fileMenu.add(newMenu);
        fileMenu.add(openMenu);
        fileMenu.add(saveMenu);
        fileMenu.add(exitMenu);
        editMenu.add(cutMenu);
        editMenu.add(copyMenu);
        editMenu.add(pasteMenu);
        helpMenu.add(infoMenu);
        return menuBar;
    }
}

Eu movi o código Jmenubar para seu próprio método, então, esperançosamente, o restante do código é mais fácil de entender.

Eu tenho um mestre jpanel, para o qual todos os outros componentes são adicionados.

Usei outro JPanel para segurar os dois Jlabels e o JButton.

Eu usei um terceiro JPanel para segurar o JCOMBOBOX.

O padrão básico é o seguinte:

  • Defina o JPanel.
  • Defina os componentes.
  • Adicione os componentes ao JPanel.
  • Adicione o jpanel ao mestre jpanel
  • Adicione o mestre jpanel ao jframe.

Outras dicas

Usuario. Eu acho que a primeira coisa que você precisa esclarecer é saber exatamente o que deseja.

Eu te ajudei nesta pergunta https: //stackoverflow.com/questions/30557777/how---th -...

Pelo que você está descrevendo, você já tem o que precisa. O que há de errado com isso:

alt text

Então, eu realmente acho que você deve descrever claramente o que deseja, para obtê -lo.

Nós o ajudaríamos, mas você deve definir claramente qual é o seu problema.

1. Seu segundo programa não vai compilar. Você está tentando atribuir um JFrame a um JPanel.

Deveria ter sido

 JFrame frame = new Bar(new JFrame("CIT Test Program")); 

2. Funciona. O que você quer está lá. Mas não como você deseja, porque você não disse a Java como deseja que ele seja exibido. Tente usar um LayoutManager Curti Gridbaglayout.

Se você estiver com pressa de criar uma GUI, tente um IDE como NetBeans que facilita seu trabalho por arrastar e soltar.

EDITAR:

Um exemplo:

public class TestN extends JFrame
{
    private JLabel label ;
    private JComboBox combo;
    private JButton button;
    public TestN()
    {
        label = new JLabel("Label:");
        combo = new JComboBox();
        combo.addItem("Item 1");
        combo.addItem("Item 2");
        combo.addItem("Item 3");

        setLayout(new GridBagLayout());

        GridBagConstraints c1 = new GridBagConstraints();
        c1.gridx = 0;
        c1.gridy = 0;
        c1.weightx = 1;
        c1.weighty = 1;
        add(label, c1);

        GridBagConstraints c2 = new GridBagConstraints();
        c2.gridx = 1;
        c2.gridy = 0;
        c2.weightx = 1;
        c2.weighty = 1;
        add(combo, c2);

        button = new JButton("Ok");
        GridBagConstraints c3 = new GridBagConstraints();
        c3.gridx = 2;
        c3.gridy = 0;
        c3.weightx = 1;
        c3.weighty = 1;
        add(button, c3);

        setTitle("Test");
        setSize(200,100);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setVisible(true);
    }

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

Isenção de responsabilidade: Este é um exemplo básico apenas para dar um exemplo. Não deve ser o código de produção ;-)

Você tem:

public class Bar extends JFrame implements ActionListener
{
    public Bar(final JFrame frame)
    {
        String[] tests = { "A+ Certification", "Network+ Certification", "Security+ Certification", "CIT Full Test Package" };
        JButton button = new JButton("Click Meh");
        add(new JLabel("Welcome to the CIT Test Program "));
        add(new JLabel("Please select which Test Package from the list below."));
        frame.setVisible(true);
        frame.setSize(250,250);

Cada Bar objeto herda de JFrame (ou seja, a Bar objeto é um tipo de JFrame) Mas você passa em um diferente JFrame objeto (o frame parâmetro) no construtor. Você então chama alguns métodos no Bar objeto - como adicionar os dois JLabel objetos - e alguns no passado JFrame - tais como o setVisible e setSize métodos.

Então você tem dois diferentes JFrame Objetos e você trabalha com cada um deles e apenas um deles está pronto para ser visível.

Parece que é a única razão pela qual você está passando no JFrame Para o construtor é definir o título da janela. Se você passar em um String com o título para o Bar construtor e depois ligar super(title); Como a primeira linha do Bar construtor então você não precisará do passado JFrame de forma alguma

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top