簡體   English   中英

Java GUI組件

[英]Java GUI components

所以我創建了3個不同的類,一個用於構造文本字段,一個用於標簽,一個用於滑塊。 我遇到的問題是,在滑塊監聽器中,如果設置為1(總共3個),則將標簽設置為“randomInt + randomInt”,我知道如何隨機化數字,它只是改變標簽的文本,這是在不同的班級。 這是我的主要fnctn,然后是兩個類:

import javax.swing.*;
import javax.swing.event.*;
import java.awt.*;
public class driver
{
    public static void main(String[] args)
    {
        colorfulLabel blueLabel = new colorfulLabel("", Color.yellow);
        colorfulTextField redTextField = new colorfulTextField(Color.red,15);
        RatingSlider mathSlide = new RatingSlider(JSlider.HORIZONTAL , 0, 3, 0);

        JFrame frame = new JFrame("Math");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JPanel panel = new JPanel();
        panel.add(blueLabel);
        panel.add(redTextField);
        panel.add(mathSlide);
        frame.getContentPane().add(panel);
        frame.pack();
        frame.setVisible(true);
    }
}

import javax.swing.*;
import java.awt.*;
public class colorfulLabel extends JLabel
{
    //constructor uses one color parameter to respresent bg color
    //creates label using bg color
    //calls parent constructor using super()
    //private Color color;
    public colorfulLabel(String text,Color bg){
        super(text);
        setBackground(bg);
        setOpaque(true);
    }
}

//RatingSlider
import javax.swing.*;
import java.awt.*;
import java.util.Random;
import javax.swing.event.*;
public class RatingSlider extends JSlider
{
    Random generator = new Random();
    private JSlider difficultySlider;
    //accepts horizontal paramater, a min, a max, and starting point for slider
    public RatingSlider(int horiz, int start, int max, int min){
        super(horiz, start, max, min);

        difficultySlider = new JSlider(horiz, start, max, min);
        difficultySlider.setMajorTickSpacing(1);
        difficultySlider.setMinorTickSpacing(0);

        setPaintTicks(true);
        setPaintLabels(true);
        difficultySlider.setAlignmentX(Component.LEFT_ALIGNMENT);

        JPanel Slide = new JPanel();
        BoxLayout layout = new BoxLayout(Slide, BoxLayout.Y_AXIS);
        Slide.setLayout(layout);
        Slide.add(difficultySlider);
        SliderListener listener = new SliderListener();

        difficultySlider.addChangeListener(listener);
    }
    private class SliderListener implements ChangeListener
    {
        public void stateChanged(ChangeEvent event)
        {
            int num1, num2;
            String lblString = "", num_1, num_2;
            if(difficultySlider.getValue() ==1)
            {
                num1 = generator.nextInt();
                num2 = generator.nextInt();
                lblString = (num1 + " + " + num2);
            }

        }
    }

}

現在我只需將colorfulLabel的文本設置為lblString,我無法弄清楚如何在不創建新對象的情況下執行此操作

我認為你可以使用.setText(“”)方法,它應該這樣做,因為你擴展了JLabel類。 但坦率地說,你可以使用Builder設計模式,你不需要擴展任何類,它應該適合你。

“現在我只需要將colorfulLabel的文本設置為lblString,如果不創建新對象,我無法弄清楚如何做到這一點”

你想要做的是傳遞ColorfulLabel作為RatingSlider參考。 像這樣

public class RatingSlider extends JSlider {
    ColorfulLabel cLabel;

    public RatingSlider(int horiz, int start, int max, int min, ColorfulLabel cLabel){
         super(horiz, start, max, min);
         this.cLabel = cLabel;
}

所以你永遠不會在new ColotrfulLabel中創建一個new ColotrfulLabelRatingSlider ,你只需使用你在main創建的同一個。 然后你可以在監聽器中使用它

cLabel.setText(lblString);

只需實例化通過ColorfulLabel引用的RatingSlider

new RatingSlider(JSlider.HORIZONTAL , 0, 3, 0, blueLabel);

就像是:

SwingUtilities.invokeLater
(
  new Runnable
  (
    public void run()
    {
      label.setText(lblText);
    }
  )
);

它需要像invokeLater一樣,以保證它在事件派發線程中運行。 您需要以某種方式獲取標簽對象的引用,直到調用它的方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM