Java 如何防止我的JPanel重新调整

Java 如何防止我的JPanel重新调整,java,swing,Java,Swing,我正在制作一个模拟RGB工作方式的java程序,3个滑块和3个相应的画布,颜色值在0到255之间。还有一个额外的画布,显示三种颜色的组合。我的问题是,当我开始增加滑块上的值时,我的整个面板开始拉伸。我已经看了代码一段时间了,运气不好。为了防止面板调整或使空间变大而不需要调整,我需要更改什么 package javaapplication1; /** * * @author Latez Bradley */ import java.awt.BorderLayout; import jav

我正在制作一个模拟RGB工作方式的java程序,3个滑块和3个相应的画布,颜色值在0到255之间。还有一个额外的画布,显示三种颜色的组合。我的问题是,当我开始增加滑块上的值时,我的整个面板开始拉伸。我已经看了代码一段时间了,运气不好。为了防止面板调整或使空间变大而不需要调整,我需要更改什么

package javaapplication1;

/**
 *
 * @author Latez Bradley
 */

import java.awt.BorderLayout;
import java.awt.Canvas;
import java.awt.Color;
import java.awt.GridLayout;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JSlider;
import javax.swing.border.TitledBorder;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;

public class RGBSlider extends JFrame {
  public RGBSlider() {
    getContentPane().add(new TColor());
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setSize(1400, 1000);
    setVisible(true);
  }



  public static void main(String arg[]) {
    new RGBSlider();
  }


}

class TColor extends JPanel {
  int n;
  DrawingCanvas canvas = new DrawingCanvas();
  DrawingCanvas rc = new DrawingCanvas();
  DrawingCanvas gc = new DrawingCanvas();
  DrawingCanvas bc = new DrawingCanvas();
  JLabel rgbValue = new JLabel("");
  JLabel red = new JLabel("<html>Red<br>Hex Value: "+n+"<br>Bin: "+n+"<html><br>Dec:"+n+"</html>");
  JLabel green =  new JLabel("<html>Green<br>Hex Value: "+n+"<br>Bin: "+n+"<html><br>Decimal: </html>"+n);
  JLabel blue = new JLabel("<html>Blue<br>Hex Value: "+n+"<br>Bin: "+n+"<html><br>Decimal: </html>"+n);



  JSlider sliderR, sliderG, sliderB;

  public TColor() {

    sliderR = getSlider(0, 255, 5, 255, 5);
    sliderR.setOrientation(1);
    sliderG = getSlider(0, 255, 0, 255, 5);
    sliderG.setOrientation(1);
    sliderB = getSlider(0, 255, 0, 255, 5);
    sliderB.setOrientation(1);


    JPanel panel = new JPanel();
    GridLayout myLayout = new GridLayout(4,3,200,0);
    panel.setLayout((myLayout));


    //panel.add(new JLabel("R-G-B Sliders (0 - 255)"));



    panel.add(sliderR);
    panel.add(red);
    rc.setSize(50, 50);
    panel.add(rc);

    panel.add(sliderG);
    panel.add(green);
    gc.setSize(50,50);
    panel.add(gc);

    panel.add(sliderB);
    panel.add(blue);
    bc.setSize(50,50);
    panel.add(bc);

    panel.add(new JLabel("RGB Value: ", JLabel.RIGHT));

    //rgbValue.setBackground(Color.white);
    //rgbValue.setForeground(Color.black);
    rgbValue.setOpaque(true);
    panel.add(rgbValue);


    canvas.setSize(300,300);
    add(canvas);
    add(panel);


  }

  public JSlider getSlider(int min, int max, int init, int mjrTkSp, int mnrTkSp) {
    JSlider slider = new JSlider(JSlider.HORIZONTAL, min, max, init);
    slider.setPaintTicks(true);
    slider.setMajorTickSpacing(mjrTkSp);
    slider.setMinorTickSpacing(mnrTkSp);
    slider.setPaintLabels(true);
    slider.addChangeListener(new SliderListener());
    return slider;
  }

  class DrawingCanvas extends Canvas {
    Color color;
    Color rColor;
    Color gColor;
    Color bColor;
    int redValue, greenValue, blueValue;



    public DrawingCanvas() {
      setSize(350, 350);
      color = new Color(0, 0, 0);

      setBackgroundColor();


    }

    public void setBackgroundColor() {
      color = new Color(redValue, greenValue, blueValue);
      setBackground(color);

      //red.setBackground(Color.white);
      //green.setBackground(gColor);
      //blue.setBackground(bColor);
    }
  }

  class SliderListener implements ChangeListener {
    public void stateChanged(ChangeEvent e) {
      JSlider slider = (JSlider) e.getSource();

      if (slider == sliderR) {
        canvas.redValue = slider.getValue();
        rc.redValue=slider.getValue();
        displayRGBColor();
        //red.setBackground(ColorR);
      } else if (slider == sliderG) {
        canvas.greenValue = slider.getValue();
        gc.greenValue = slider.getValue();
        displayRGBColor();
      } else if (slider == sliderB) {
        canvas.blueValue = slider.getValue();
        bc.blueValue=slider.getValue();
        displayRGBColor();
      }

      rc.repaint();
      red.setIgnoreRepaint(true);
      gc.repaint();
      bc.repaint();
      canvas.repaint();
    }

      public String toBin(int x){
      String temp="";
      while(x!=0){
              temp = (x%2)+temp;
              x/=2;
      }
      return temp;
    }



    public void displayRGBColor() {
      canvas.setBackgroundColor();
      rc.setBackgroundColor();
      gc.setBackgroundColor();
      bc.setBackgroundColor();

      //rgbValue.setText(Integer.toString(canvas.color.getRGB() & 0xffffff, 16));
      rgbValue.setText("<html> Hex Value: "+Integer.toString(canvas.color.getRGB() & 0xfffffff, 16)+"<br>Bin: "+toBin(sliderR.getValue())+""+toBin(sliderG.getValue())+""+toBin(sliderB.getValue()));
      red.setText("<html>Red<br>Hex Value: "+Integer.toString(canvas.color.getRed()  & 0xffffff, 16)+"<br>Bin: "+" "+"<html><br>Dec:"+sliderR.getValue()+"</html>");
      blue.setText("<html>Blue<br>Hex Value: "+Integer.toString(canvas.color.getBlue()  & 0xffffff, 16)+"<br>Bin: "+toBin(sliderB.getValue())+"<html><br>Dec:"+sliderB.getValue()+"</html>");
      green.setText("<html>Green<br>Hex Value: "+Integer.toString(canvas.color.getGreen()  & 0xffffff, 16)+"<br>Bin: "+toBin(sliderG.getValue())+"<html><br>Dec:"+sliderG.getValue()+"</html>");
    }

  }
}
PackageJavaApplication1;
/**
*
*@作者Latez Bradley
*/
导入java.awt.BorderLayout;
导入java.awt.Canvas;
导入java.awt.Color;
导入java.awt.GridLayout;
导入javax.swing.JFrame;
导入javax.swing.JLabel;
导入javax.swing.JPanel;
导入javax.swing.JSlider;
导入javax.swing.border.TitledBorder;
导入javax.swing.event.ChangeEvent;
导入javax.swing.event.ChangeListener;
公共类RGBSlider扩展JFrame{
公共RGBSlider(){
getContentPane().add(新的TColor());
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
设置大小(1400、1000);
setVisible(真);
}
公共静态void main(字符串arg[]){
新的RGBSlider();
}
}
类TColor扩展了JPanel{
int n;
DrawingCanvas canvas=新建DrawingCanvas();
DrawingCanvas rc=新的DrawingCanvas();
DrawingCanvas gc=新建DrawingCanvas();
DrawingCanvas bc=新的DrawingCanvas();
JLabel rgbValue=新的JLabel(“”);
JLabel red=新JLabel(“红色
十六进制值:+n+”
Bin:+n+”
Dec:+n+”); JLabel绿色=新的JLabel(“绿色
十六进制值:+n+”
二进制:+n+”
十进制:+n); JLabel blue=新的JLabel(“蓝色
十六进制值:“+n+”
二进制:“+n+”
十进制:“+n”); JSlider SLIDER、sliderG、sliderB; 公共颜色(){ sliderR=getSlider(0,255,5,255,5); 滑块设置方向(1); sliderG=getSlider(0,255,0,255,5); sliderG.setOrientation(1); sliderB=getSlider(0,255,0,255,5); 滑块b.设置方向(1); JPanel面板=新的JPanel(); GridLayout myLayout=新的GridLayout(4,3200,0); 面板设置布局((myLayout)); //面板。添加(新JLabel(“R-G-B滑块(0-255)”); 面板。添加(滑块); 面板。添加(红色); 钢筋混凝土设置尺寸(50,50); 面板。添加(rc); 面板。添加(幻灯片); 面板。添加(绿色); gc.setSize(50,50); 增补(gc); 面板.添加(滑块B); 面板。添加(蓝色); bc.设置尺寸(50,50); 增补(bc); 添加(新JLabel(“RGB值:”,JLabel.RIGHT)); //RGB值。背景(颜色。白色); //RGB值。设置前景(颜色。黑色); rgbValue.set不透明(true); 面板。添加(RGB值); canvas.setSize(300300); 添加(画布); 添加(面板); } 公共JSlider getSlider(int-min、int-max、int-init、int-mjrTkSp、int-mnrTkSp){ JSlider slider=新的JSlider(JSlider.HORIZONTAL,min,max,init); slider.setPaintTicks(真); 滑块。设置主轨迹间距(mjrTkSp); 滑块.setMinorTickSpacing(mnrTkSp); slider.setPaintLabels(true); addChangeListener(新的SliderListener()); 返回滑块; } 类DrawingCanvas扩展了Canvas{ 颜色; 颜色; 色彩; 颜色b颜色; int redValue、greenValue、blueValue; 公共绘图画布(){ 设置大小(350350); 颜色=新颜色(0,0,0); setBackgroundColor(); } 公共空间挫折背景色(){ 颜色=新颜色(红色值、绿色值、蓝色值); 挫折背景(颜色); //红色。背景(颜色。白色); //绿色。背景色(gColor); //蓝色。背景色(B色); } } 类SliderListener实现ChangeListener{ 公共无效状态已更改(更改事件e){ JSlider slider=(JSlider)e.getSource(); 如果(滑块==滑块错误){ canvas.redValue=slider.getValue(); rc.redValue=slider.getValue(); displayRGBColor(); //红色。背景(彩色); }else if(slider==sliderG){ canvas.greenValue=slider.getValue(); gc.greenValue=slider.getValue(); displayRGBColor(); }else if(滑块==滑块B){ canvas.blueValue=slider.getValue(); blueValue=slider.getValue(); displayRGBColor(); } rc.repaint(); 红色。setIgnoreRepaint(真); gc.repaint(); bc.repaint(); canvas.repaint(); } 公共字符串toBin(int x){ 字符串temp=“”; 而(x!=0){ 温度=(x%2)+温度; x/=2; } 返回温度; } public void displayRGBColor(){ canvas.setBackgroundColor(); rc.setBackgroundColor(); gc.setBackgroundColor(); bc.setBackgroundColor(); //rgbValue.setText(Integer.toString(canvas.color.getRGB()&0xffffff,16)); rgbValue.setText(“十六进制值:”+Integer.toString(canvas.color.getRGB()&0xfffffff,16)+“
Bin:”+toBin(sliderR.getValue())+“”+toBin(slider.getValue())+“”+toBin(sliderB.getValue()); red.setText(“red
十六进制值:“+Integer.toString(canvas.color.getRed()&0xffffff,16)+”
Bin:“+”+”
Dec:“+sliderR.getValue()+”); blue.setText(“blue
十六进制值:”+Integer.toString(canvas.color.getBlue()&0xffffff,16)+“
Bin:“+toBin(sliderB.getValue())+”
Dec:“+sliderB.getValue()+”; green.setText(“green
十六进制值:”+Integer.toString(canvas.color.getGreen()&0xffffff,16)+“
Bin:”+toBin(sliderG.getValue())+“
Dec:”+sliderG.getValue()+”; } } }
  • 不要设置尺寸或首选尺寸。而是让组件和布局管理器为您设置尺寸
  • 在添加组件之后和设置可见之前,在JFrame上调用
    pack()
  • 这里不要使用画布或其他AWT组件。使用JPanels或JLabels

  • 不要混合使用AWT(画布)和Swing组件。使用所有的Swing组件。我在玩21点游戏时遇到了这个问题,每次出现卡片图片时,我都会尝试显示卡片