【问题标题】:Jslider won't appear on gridJslider不会出现在网格上
【发布时间】:2014-01-21 20:13:49
【问题描述】:

我正在尝试向我的 GUI 添加一个滑块,但它不会显示,我是 java 新手,所以如果你能提供帮助,将不胜感激!我不确定如何将滑块添加到主网格,目前它没有出现。

import java.awt.*;
import java.awt.event.*;
import java.util.*;
import java.io.*;
import javax.swing.*;



public class Grid extends JFrame
{
 public void Slider()
 {
    setLayout(new FlowLayout()); 
    JSlider slider;
    JLabel label;

    slider = new JSlider(JSlider.VERTICAL, 0, 20, 0);
    slider.setMajorTickSpacing(5);
    slider.setPaintTicks(true);
    add(slider);

    label = new JLabel ("Number of lifeforms: 0");
    add(label);

 }  

public static void main (String args[])
   {
  JFrame Grid = new JFrame();
  Grid.setSize(800,600);
  Grid.setTitle("Artificial life simulator");
   Grid.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  

   String rows = JOptionPane.showInputDialog("How many rows does the grid have?");
   int row = Integer.parseInt(rows);

   String columns = JOptionPane.showInputDialog("How many columns does the grid have?");
   int col = Integer.parseInt(columns);

   JOptionPane.showConfirmDialog(null, "Are these the correct demensions: "
  +row+" x "+col+ "?", 
  "Yes or No", JOptionPane.YES_NO_OPTION);


  Container pane = Grid.getContentPane();
  pane.setLayout(new GridLayout(row,col));

  Color square;

  for (int x = 1; x <=(row*col); x++)
  {
     int altr = 0;
     altr = (x-1) % col;
     altr += (x-1) / col;

     if (altr % 2 == 0)
     {
        square = Color.white;
     }

     else
     {
        square = Color.black;
     }

     JPanel panel = new JPanel();
     panel.setPreferredSize(new Dimension(800/row, 600/col));
     panel.setBackground(square);
     pane.add(panel);
  }
  Grid.setVisible(true);

} }

【问题讨论】:

  • 有人吗?我试图添加行 Grid.Add(Slider);没有成功

标签: java swing user-interface slider jslider


【解决方案1】:

请注意您的示例的几处更改:

  • JFrame的默认布局是BorerLayout;垂直滑块在EAST 中运行良好。

  • slider() 方法返回一个JSlider;标签可以进入其余三个BorerLayout 区域之一。

  • 覆盖getPreferredSize() 以定义呈现窗格的大小。

  • TODO:另见Initial Threads

经测试:

import java.awt.*;
import javax.swing.*;

public class Grid extends JFrame {

    private static JSlider slider() {
        JSlider slider;
        slider = new JSlider(JSlider.VERTICAL, 0, 20, 0);
        slider.setMajorTickSpacing(5);
        slider.setPaintTicks(true);
        return slider;
    }

    public static void main(String args[]) {
        JFrame grid = new JFrame();
        grid.setSize(800, 600);
        grid.setTitle("Artificial life simulator");
        grid.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        int row = 3;
        int col = 3;

        JPanel pane = new JPanel(){

            @Override
            public Dimension getPreferredSize() {
                return new Dimension(320, 240);
            }
        };
        pane.setLayout(new GridLayout(row, col));
        Color square;
        for (int x = 1; x <= (row * col); x++) {
            int altr = 0;
            altr = (x - 1) % col;
            altr += (x - 1) / col;

            if (altr % 2 == 0) {
                square = Color.white;
            } else {
                square = Color.black;
            }
            JPanel panel = new JPanel(new GridLayout());
            panel.setBackground(square);
            pane.add(panel);
        }
        grid.add(pane);
        grid.add(slider(), BorderLayout.EAST);
        grid.pack();
        grid.setVisible(true);
    }
}

【讨论】:

  • 谢谢 :) 如果我想在滑块上添加 Jabel,我会怎么做?我试过.. private static JSlider slider() { JSlider 滑块; JLable标签;滑块 = 新 JSlider(JSlider.VERTICAL, 0, 20, 0);滑块.setMajorTickSpacing(5);滑块.setPaintTicks(true); int value = slider.getValue(); label = new JLabel("当前值:0");添加(标签); label.setText("当前值:" +_value);返回滑块; }
  • 将标签和滑块添加到面板中,然后将该面板添加到框架的内容窗格中。更新您的问题以包含显示您当前方法的Minimal, Complete, Valid Example
猜你喜欢
  • 1970-01-01
  • 2013-09-01
  • 1970-01-01
  • 2016-10-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-21
相关资源
最近更新 更多