/ / JProgressBar निचोड़ा हुआ हो जाता है / बेहतर आकार बदलता है - जावा, स्विंग, ग्रिडबगेलआउट, जॉग्रगबार, पसंदीदा

जेपी प्रोग्रेसबार को निचोड़ा हुआ / आकार बदलता है - जावा, स्विंग, ग्रिडबैगआउट, जेप्रेश प्रोग्रेस, वरीयताकृत

मैं एक का उपयोग कर रहा हूँ JProgressBar मुझ पर Swing जीयूआई:

जब मैं खिड़की को कम कर देता हूं, जबकि यह अपडेट कर रहा है progressBar.setValue() इसे इस तरह निचोड़ेंगे:

ध्यान दें कि आकार या समान नहीं है "इसे ठीक न करें।

ऐसा क्यों होता है और इसे कैसे रोका जाए? इसका क्या कारण होता है? मैं चाहता हूं कि प्रगतिबार पहले की तरह ही आकार में रहे।

मैं इसका उपयोग कर रहा हूँ GridBagLayout.

पुन: पेश करने के लिए कोड:

import javax.swing.JFrame;
import javax.swing.SwingWorker;

import java.awt.Dimension;
import java.awt.GridBagLayout;

import javax.swing.JProgressBar;

import java.awt.GridBagConstraints;

import javax.swing.JButton;

import java.awt.Insets;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

import javax.swing.JLabel;
import javax.swing.JTextArea;
import javax.swing.JScrollPane;

@SuppressWarnings("serial")
public class ProgressBarSqueezeFixedExample extends JFrame
{
public ProgressBarSqueezeFixedExample()
{
setDefaultCloseOperation(EXIT_ON_CLOSE);
setSize(500, 500);
GridBagLayout gridBagLayout = new GridBagLayout();
gridBagLayout.columnWidths = new int[] { 0, 0, 0 };
gridBagLayout.rowHeights = new int[] { 0, 0, 0, 0, 0 };
gridBagLayout.columnWeights = new double[] { 1.0, 0.0, Double.MIN_VALUE };
gridBagLayout.rowWeights = new double[] { 0.0, 0.0, 0.0, 1.0,
Double.MIN_VALUE };
getContentPane().setLayout(gridBagLayout);

JProgressBar progressBar = new JProgressBar();

JTextArea textArea = new JTextArea();

JButton btnRun = new JButton("Run");
setPreferredSize(new Dimension(200, 200));

btnRun.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent arg0)
{
SwingWorker<String, String> worker = new SwingWorker<String, String>()
{
@Override
protected String doInBackground() throws Exception
{
for (int i = 0; i < 10001; i++)
{
try
{
Thread.sleep(1);
} catch (InterruptedException e)
{
e.printStackTrace();
}

progressBar.setValue(i);
progressBar.setString(i + " %");

textArea.append(i + System.lineSeparator());
}

return null;
}
};

worker.execute();
}
});
GridBagConstraints gbc_btnRun = new GridBagConstraints();
gbc_btnRun.insets = new Insets(0, 0, 5, 5);
gbc_btnRun.gridx = 0;
gbc_btnRun.gridy = 0;
getContentPane().add(btnRun, gbc_btnRun);

JLabel lblProgress = new JLabel("Progress");
GridBagConstraints gbc_lblProgress = new GridBagConstraints();
gbc_lblProgress.insets = new Insets(0, 0, 5, 5);
gbc_lblProgress.gridx = 0;
gbc_lblProgress.gridy = 1;
getContentPane().add(lblProgress, gbc_lblProgress);

progressBar.setMaximum(10000);
progressBar.setStringPainted(true);
progressBar.setMinimumSize(progressBar.getPreferredSize()); // Fixes squeezing issues

GridBagConstraints gbc_progressBar = new GridBagConstraints();
gbc_progressBar.insets = new Insets(0, 0, 5, 5);
gbc_progressBar.gridx = 0;
gbc_progressBar.gridy = 2;
getContentPane().add(progressBar, gbc_progressBar);

JScrollPane scrollPane = new JScrollPane();
GridBagConstraints gbc_scrollPane = new GridBagConstraints();
gbc_progressBar.fill=GridBagConstraints.HORIZONTAL; // Alternate fix
gbc_scrollPane.gridwidth = 2;
gbc_scrollPane.fill = GridBagConstraints.BOTH;
gbc_scrollPane.gridx = 0;
gbc_scrollPane.gridy = 3;
getContentPane().add(scrollPane, gbc_scrollPane);

scrollPane.setViewportView(textArea);
pack();

setVisible(true);
}

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

गुई का आकार बदलना और प्रोग्रेसबार को निचोड़ने के लिए टेक्स्टएआरए अपेंड () के साथ यह कैसा लगता है।

उत्तर:

जवाब के लिए 2 № 1

उपयोग GridBagConstraints # भरने संपत्ति जो तब उपयोग की जाती है जब घटक का प्रदर्शन क्षेत्र घटक के अनुरोधित आकार से बड़ा होता है। यह निर्धारित करता है कि घटक का आकार बदलना है या नहीं।

gbc_progressBar.fill=GridBagConstraints.HORIZONTAL;

ध्यान दें: के कई उदाहरण बनाने की कोई जरूरत नहीं है GridBagConstraints। आप एक ही वस्तु का उपयोग करके एक ही चीज प्राप्त कर सकते हैं।

पर और अधिक पढ़ें GridBagLayout का उपयोग कैसे करें और उदाहरण पर एक नज़र है।