Jlist не отображается / не отображается в апплете

#java #layout #applet #jlist #japplet

#java #макет #апплет #jlist #japplet

Вопрос:

По какой-то причине Jlist он не отображается в моем апплете.

Он отображается справа от ползунка, но только при нажатии на отдельные элементы.

Я пытался this.validate() и this.repaint() безуспешно. Кто-нибудь может мне помочь?

 import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JApplet;
import java.awt.Graphics;
import javax.swing.JList;
import javax.swing.JRadioButton;
import javax.swing.JSlider;
import javax.swing.ListSelectionModel;

public class HeatingHome extends JApplet implements ActionListener
{
        // declare variables here

    JRadioButton switchIt = new JRadioButton();
    JSlider tempControl = new JSlider(JSlider.VERTICAL, 10, 15, 11);


    String[] theRooms = {"Porch", "Kitchen", "Living Room", "Hall", "Bedroom 1", "Bathroom", "Bedroom 2"};   
    JList roomsList = new JList(theRooms);


    public void init()
    {

        setSize(1000,600);


    }

    public void paint(Graphics g)
    {
        super.paint(g);


        roomsList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        roomsList.setBounds(700, 200, 150, 150);
        roomsList.setVisible(true);
        roomsList.setEnabled(true);
        add(roomsList);


               //tempControl.addChangeListener(e);
       tempControl.setMajorTickSpacing(10);
       tempControl.setPaintLabels(true);
       tempControl.setMinorTickSpacing(1);
       tempControl.setPaintTicks(true);
       tempControl.setBounds(600, 200, 100, 200);
       tempControl.setEnabled(true);
       add(tempControl);



    }



    @Override
    public void actionPerformed(ActionEvent e) {
        throw new UnsupportedOperationException("Not supported yet.");
    }
 }
  

Ответ №1:

В то время как список и ползунок добавляются в апплет каждый раз, когда он рисуется, radiobutton никогда не добавляется.

Это может помочь вам начать:

Отопление дома

 // <applet code='HeatingHome' width=400 height=200></applet>
import java.awt.*;
import javax.swing.*;
import javax.swing.border.*;

public class HeatingHome extends JApplet
{
    // declare variables here
    JRadioButton switchIt = new JRadioButton();
    JSlider tempControl = new JSlider(JSlider.VERTICAL, 10, 15, 11);

    String[] theRooms = {"Porch", "Kitchen", "Living Room", "Hall", "Bedroom 1", "Bathroom", "Bedroom 2"};
    JList roomsList = new JList(theRooms);

    public void init()
    {
        // applet size is set by the HTML
        //setSize(1000,600);
        setLayout(new BorderLayout());

        JPanel gui = new JPanel(new BorderLayout(5,5));
        gui.setBackground(Color.ORANGE);
        gui.setBorder(new EmptyBorder(20,20,20,20));

        roomsList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        // Use LAYOUTS!!!
        //roomsList.setBounds(700, 200, 150, 150);
        // Becomes visible when added to something!
        //roomsList.setVisible(true);
        // Enabled by default!
        //roomsList.setEnabled(true);
        gui.add(roomsList, BorderLayout.EAST);

        //tempControl.addChangeListener(e);
        tempControl.setMajorTickSpacing(10);
        tempControl.setPaintLabels(true);
        tempControl.setMinorTickSpacing(1);
        tempControl.setPaintTicks(true);
        //tempControl.setBounds(600, 200, 100, 200);
        //tempControl.setEnabled(true);
        //add(tempControl);
        gui.add(tempControl, BorderLayout.WEST);

        gui.add(switchIt, BorderLayout.NORTH);

        add(gui);
        validate();
    }
}
  

Ответ №2:

Вы добавляете множество элементов управления каждый раз, когда апплет рисуется. Это означает, что каждый новый добавляемый вами элемент управления будет запускать по крайней мере еще одну операцию рисования.

Переместите весь код из paint метода в конструктор или аналогичный.

paint предназначен для самостоятельного рисования визуальных элементов управления. Т.Е. Вы берете предоставленный Graphics объект и выполняете с ним какие-либо действия, пока не будете довольны. Обычно вы больше ничего не изменяете, поскольку рисование в целом немного непредсказуемо.